package Gestores.DtoObjects;

import Gestores.DaoInterfaces.CursoDAO;
import Gestores.DataBaseLink;
import Gestores.Entidades.EntidadCurso;
import Gestores.NucleoBaseDatos;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class CursoDTO implements CursoDAO {

    private DataBaseLink gestor;

    public CursoDTO() {
        gestor = NucleoBaseDatos.getInstance();
    }

    @Override
    public ArrayList<Object> buscarPorId(int id) throws Exception {
        return devolverTabla(gestor.executeSql("Call BuscarCursoPorId(" + id + ");"));
    }

    @Override
    public ArrayList<Object> buscarPorIdAfiliado(String idAfiliado) throws Exception {
        return devolverTabla(gestor.executeSql("Call BuscarCursoPorIdAfiliado('" + idAfiliado + "');"));
    }

    @Override
    public void insertar(Object objeto) throws Exception {
        EntidadCurso ec = (EntidadCurso) objeto;
        gestor.executeSql("Call InsertarCurso(" + ec.cadenaParaInsercion() + ");");
    }

    @Override
    public void actualizar(Object primaryKey, Object objeto) throws Exception {
        Integer id = (Integer) primaryKey;
        EntidadCurso ec = (EntidadCurso) objeto;
        gestor.executeSql("Call ActualizarCurso(" + id + "," + ec.cadenaParaActualizacion() + ");");
    }

    @Override
    public void eliminacionLogica(Object objeto) throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void eliminacionFisica(Object objeto) throws Exception {
        EntidadCurso ec = (EntidadCurso) objeto;
        gestor.executeSql("Call EliminarCurso(" + ec.cadenaParaEliminacion() + ");");
    }

    @Override
    public ArrayList<Object> listarTabla() throws Exception {
        return devolverTabla(gestor.executeSql("Call ListarCurso();"));
    }

    @Override
    public boolean existe(int id) throws Exception {
        ResultSet resultSet = gestor.executeSql("Select ExisteCurso(" + id + ");");
        resultSet.next();
        return resultSet.getBoolean(1);
    }

    private ArrayList<Object> devolverTabla(ResultSet executeSql) throws SQLException {
        ArrayList<Object> lista = new ArrayList<Object>();
        while (executeSql.next()) {
            EntidadCurso ec = new EntidadCurso();
            ec.setId(executeSql.getInt(1));
            ec.setIdAfiliado(executeSql.getString(2));
            ec.setDescripcion(executeSql.getString(3));
            ec.setFecha(executeSql.getDate(4));

            lista.add(ec);
        }
        return lista;
    }
}
